package cn.le.agent;


class Building{}
class House extends Building{}

/**
 * Created by admin on 2017/6/8.
 * isInstance是Class的一个方法,意思:这个对象能不能转化为这个类
 * 1.一个对象是本身类的一个对象
 * 2.一个对象能被转化为本身类所继承类和实现接口强转
 * 3.所有对象都能被Object的强转
 * 4.凡是null有关的都是false,class.inInstance(null)
 *
 * instanceof 是一个关键字,类似操作符(new ==),意思:这个对象是不是这种类型
 * 1.一个对象是本身类的一个对象
 * 2.一个对象是本身类父类和接口的一个对象
 * 3.所有对象都是Object
 * 4.凡是null有关的都是false,null.instanceof(class)
 */
public class ClassTypeCapture<T> {

    Class<T> kind;

    public ClassTypeCapture(Class<T> kind)
    {
        this.kind = kind;
    }

    public boolean f(Object arg)
    {
        return kind.isInstance(arg);
    }

    public static void main(String[] args) {

        ClassTypeCapture<Building> ctt1 = new ClassTypeCapture<>(Building.class);
        System.out.println(ctt1.f(new Building()));
        System.out.println(ctt1.f(new House()));

        ClassTypeCapture<House> ctt2 = new ClassTypeCapture<>(House.class);
        System.out.println(ctt2.f(new Building()));
        System.out.println(ctt2.f(new House()));
    }
}
